/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Asignaciones;

import Entidades.Asignacionperiodoaula;
import Entidades.Asignacionperiodocatedratico;
import Entidades.Aula;
import Entidades.Catedratico;
import Entidades.Controlaulas;
import Entidades.Controlcatedraticos;
import Entidades.Estado;
import Entidades.Horarioaula;
import Entidades.Horariocatedratico;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

/**
 *
 * @author Isaac Cifuentes <isaaccivan@gmail.com>
 */
public class ClasetemporarlAulas {
ObservableList<HorarioAulas> lista=FXCollections.observableArrayList();
 Asignacion nueva=new Asignacion();//clase auxiliar
Collection<HorarioAulas> micoleccion=lista;//collection basica

    public ClasetemporarlAulas() {
    }

/***
 * 
 * Ingresa los datos en  ArrayList<HorarioAulas> lista en base
 * a la aula y el estado del dia
 * @param aula
 * @param es 
 */
public void Buscar (Aula aula){
HorarioAulas d = null;

int a=0;//contador para los dias
int b=0;//contador
int c=0;//contador para los controles
ArrayList<Horarioaula> dias= (ArrayList<Horarioaula>) nueva.BuscarDias(aula);
while(a<dias.size()){
ArrayList<Asignacionperiodoaula> ListadePeriodosdelDia=(ArrayList<Asignacionperiodoaula>) nueva.BuscarPeridodeldia(dias.get(a));
while(b<ListadePeriodosdelDia.size())    {
ArrayList<Controlaulas> e=(ArrayList<Controlaulas>) nueva.AdministrarControlAulas(ListadePeriodosdelDia.get(b));
while(c<e.size()){    
    d=new HorarioAulas(dias.get(a),ListadePeriodosdelDia.get(b).getPeriodoidPeriodo(),e.get(c));
    d.setDiaperiodos(ListadePeriodosdelDia.get(b));
    lista.add(d);
c++;
}
c=0;
    b++;
}
b=0;
a++;
}
}
/***
 * Metodo para crear un horario filtrandolo directamente por el estado
 * @param el aula
 * @param el estado del dia
 * @param el estado "filtrador" 
 */
public void BuscarporEstado(Aula aula, Estado estadobuscado){
Buscar(aula);
FiltrarporEstado(estadobuscado);
}
/***
 * Metodo para filtrar los resultados de la lista en base a un determinado estado
 * @param el estado por el cual queremos filtrar los datos 
 */
public void FiltrarporEstado(Estado estadobuscado){
ArrayList<HorarioAulas> listafiltrada=new ArrayList<HorarioAulas>();
for(HorarioAulas buscador:this.lista){
if(buscador.getEstadoActual().getIdEstado().equals(estadobuscado.getIdEstado())){
listafiltrada.add(buscador);
}
}
this.lista=(ObservableList<HorarioAulas>) listafiltrada;
}

    public ObservableList<HorarioAulas> getLista() {
        return lista;
    }
    



/***
 * Metodo auxiliar para obtener una cadena con el horario y su estado
 * @return una cadena con el horario para cada dia
 */
public String imprimir(){
String cadena="";
int contador=0;
while(contador<lista.size()){
 cadena+=lista.get(contador).imprimir()+"\n";
 contador++;
}
return cadena;
}

    public Collection<HorarioAulas> getMicoleccion() {
        return micoleccion;
    }

    
    
      /****
       * 
       * @param catedratico 
       */
      
      Asignacion nuevaA = new Asignacion();
      ObservableList<HorarioCatedratico> listaCat = FXCollections.observableArrayList();
      
      public void Buscar(Catedratico catedratico){
          HorarioCatedratico d = null;
          
          
          /*
           * contadores
           */
          int cont_dias=0;  //dias
          int cont=0;  //contador
          int cont_controles=0;  //contador para los controles
          
          ArrayList<Horariocatedratico> dias = (ArrayList<Horariocatedratico>) nuevaA.getVerifiedSchedule(catedratico);
          
          while(cont_dias<dias.size()){
              //ArrayList<Asignacionperiodocatedratico> ListadePeriodosdelDia=(ArrayList<Asignacionperiodocatedratico>) nueva.obtenerAsignacionPeriodoCatedraticos(dias.get(cont_dias));
              ArrayList<Asignacionperiodocatedratico> ListadePeriodosdelDia = (ArrayList<Asignacionperiodocatedratico>) nueva.obtenerAsignacionPeriodoCatedraticos(null, true);
              
              while(cont<ListadePeriodosdelDia.size())    {
                  //ArrayList<Controlcatedraticos> e=(ArrayList<Controlcatedraticos>) nueva.AdministrarControlAulas(ListadePeriodosdelDia.get(cont));
                  ArrayList<Controlcatedraticos> e = (ArrayList<Controlcatedraticos>) nuevaA.AdministrarControlCatedraticos(null);
                  while(cont_controles<e.size()){
                      d=new HorarioCatedratico(dias.get(cont_dias),ListadePeriodosdelDia.get(cont).getPeriodoidPeriodo(),e.get(cont_controles));
                      d.setDiasperiodosCat(ListadePeriodosdelDia.get(cont));
                      listaCat.add(d);
                      cont_controles++;
                  }
                  
                  cont_controles=0;
                  cont++;
              }
              
              cont=0;
              cont_dias++;
          }
      }
      
      /****
       * 
       * @param catedratico
       * @param estadobuscado 
       */
      public void BuscarporEstado(Catedratico catedratico, Estado estadobuscado){
          Buscar(catedratico);
          FiltrarporEstado(estadobuscado);
      }
      
      /****
       * 
       * @param estadobuscado 
       */
      public void FiltrarporEstadoCat(Estado estadobuscado){
          ArrayList<HorarioCatedratico> listaFiltradaCat = new ArrayList<HorarioCatedratico>();
          
          for(HorarioCatedratico buscador : this.listaCat){
              if(buscador.getEstadoActual().getIdEstado().equals(estadobuscado.getIdEstado())){
                  listaFiltradaCat.add(buscador);
              }
          }
          
          this.listaCat = (ObservableList<HorarioCatedratico>) listaFiltradaCat;
      }
    
    
}
